package com.sky.utils;

import io.jsonwebtoken.*;
import org.springframework.beans.factory.annotation.Value;

import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Map;
// 解析jwt类
public class JwtUtils {
    // 生成一个jwt
    public static String createJwt(Map<String, Object> map,String KEY,Long date){
        long timeout = System.currentTimeMillis() + date; // 定义过期时间 毫秒

        JwtBuilder jwtBuilder = Jwts.builder()
                // 设置密钥
                .signWith(SignatureAlgorithm.HS256, KEY.getBytes(StandardCharsets.UTF_8))
                // 如果有私有声明，一定要先设置这个自己创建的私有的声明，这个是给builder的claim赋值，一旦写在标准的声明赋值之后，就是覆盖了那些标准的声明的
                .setClaims(map)
                // 过期时间
                .setExpiration(new Date(timeout));

        return jwtBuilder.compact();
    }
    // 解析jwt
//    public static Claims parseJWT(String token, String KEY){
//        Jws<Claims> jws = Jwts.parser()
//                .setSigningKey(KEY.getBytes(StandardCharsets.UTF_8))
//                .parseClaimsJws(token);
//        return jws.getBody();
//    }
    public static Claims parseJWT(String token, String secretKey) {
        // 得到DefaultJwtParser
        Claims claims = Jwts.parser()
                // 设置签名的秘钥
                .setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8))
                // 设置需要解析的jwt
                .parseClaimsJws(token).getBody();
        return claims;
    }
}
